//=============================================================================
// SWDA Actor Sprites
// SWDA_ActorSprites.js
//=============================================================================
 /*:
 * @plugindesc 枫之舞功能 - 改变角色战斗图素材分割方式
 * @author 老饕
 * @version 1.0.0
 * @date 2020.3.1
 *
 * @param ---素材划分---
 * @default
 *
 * @param Row
 * @text 行数
 * @parent ---素材划分---
 * @type number
 * @desc 战斗图动作行数
 * @default 6
 *
 * @param Column
 * @text 列数
 * @parent ---素材划分---
 * @type number
 * @desc 战斗图动作列数
 * @default 3
 *
 * @param Frame Number
 * @text 帧数
 * @parent ---素材划分---
 * @type number
 * @desc 战斗图每个动作包含的帧数
 * @default 3
 *
 * @param Default Frame
 * @text 默认帧
 * @parent ---素材划分---
 * @type number
 * @desc 战斗图动作默认帧（从0开始）
 * @default 1
 *
 * @param Motion Speed
 * @text 动画速度
 * @parent ---素材划分---
 * @type number
 * @desc 动画速度
 * @default 12
 *
 *
 *
 * @param ---动作编号---
 * @default
 *
 * @param walk
 * @parent ---动作编号---
 * @type number
 * @desc 行走对应素材划分序号
 * @default 0
 * 
 * @param wait
 * @parent ---动作编号---
 * @type number
 * @desc 待机对应素材划分序号
 * @default 1
 * 
 * @param chant
 * @parent ---动作编号---
 * @type number
 * @desc 吟唱对应素材划分序号
 * @default 2
 * 
 * @param guard
 * @parent ---动作编号---
 * @type number
 * @desc 防御对应素材划分序号
 * @default 3
 * 
 * @param damage
 * @parent ---动作编号---
 * @type number
 * @desc 受伤对应素材划分序号
 * @default 4
 * 
 * @param evade
 * @parent ---动作编号---
 * @type number
 * @desc 闪避对应素材划分序号
 * @default 5
 * 
 * @param thrust
 * @parent ---动作编号---
 * @type number
 * @desc 出拳对应素材划分序号
 * @default 6
 * 
 * @param swing
 * @parent ---动作编号---
 * @type number
 * @desc 挥动对应素材划分序号
 * @default 7
 * 
 * @param missile
 * @parent ---动作编号---
 * @type number
 * @desc 投掷对应素材划分序号
 * @default 8
 * 
 * @param skill
 * @parent ---动作编号---
 * @type number
 * @desc 技能对应素材划分序号
 * @default 9
 * 
 * @param spell
 * @parent ---动作编号---
 * @type number
 * @desc 魔法对应素材划分序号
 * @default 10
 * 
 * @param item
 * @parent ---动作编号---
 * @type number
 * @desc 使用对应素材划分序号
 * @default 11
 * 
 * @param escape
 * @parent ---动作编号---
 * @type number
 * @desc 逃跑对应素材划分序号
 * @default 12
 * 
 * @param victory
 * @parent ---动作编号---
 * @type number
 * @desc 胜利对应素材划分序号
 * @default 13
 * 
 * @param dying
 * @parent ---动作编号---
 * @type number
 * @desc 重伤对应素材划分序号
 * @default 14
 * 
 * @param abnormal
 * @parent ---动作编号---
 * @type number
 * @desc 不良状态对应素材划分序号
 * @default 15
 * 
 * @param sleep
 * @parent ---动作编号---
 * @type number
 * @desc 睡眠对应素材划分序号
 * @default 16
 * 
 * @param dead
 * @parent ---动作编号---
 * @type number
 * @desc 死亡对应素材划分序号
 * @default 17
 *
 *
 *
 * @param ---动画循环---
 * @default
 *
 * @param walk loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 行走动画是否循环
 * @default true
 * 
 * @param wait loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 待机动画是否循环
 * @default true
 * 
 * @param chant loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 吟唱动画是否循环
 * @default true
 * 
 * @param guard loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 防御动画是否循环
 * @default true
 * 
 * @param damage loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 受伤动画是否循环
 * @default false
 * 
 * @param evade loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 闪避动画是否循环
 * @default false
 * 
 * @param thrust loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 出拳动画是否循环
 * @default false
 * 
 * @param swing loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 挥动动画是否循环
 * @default false
 * 
 * @param missile loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 投掷动画是否循环
 * @default false
 * 
 * @param skill loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 技能动画是否循环
 * @default false
 * 
 * @param spell loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 魔法动画是否循环
 * @default false
 * 
 * @param item loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 使用动画是否循环
 * @default false
 * 
 * @param escape loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 逃跑动画是否循环
 * @default true
 * 
 * @param victory loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 胜利动画是否循环
 * @default true
 * 
 * @param dying loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 重伤动画是否循环
 * @default true
 * 
 * @param abnormal loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 不良状态动画是否循环
 * @default true
 * 
 * @param sleep loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 睡眠动画是否循环
 * @default true
 * 
 * @param dead loop
 * @parent ---动画循环---
 * @type boolean
 * @desc 死亡动画是否循环
 * @default true
 
 * @help
 * 此脚本改变角色战斗图素材分割方式。
*/
var Imported = Imported || {};
Imported.SWDA_ActorSprites = true;

var SWDA_ActorSprites = SWDA_ActorSprites || {};
var params = PluginManager.parameters('SWDA_ActorSprites');

// 素材
SWDA_ActorSprites.row          = Number(params["Row"]);
SWDA_ActorSprites.column       = Number(params["Column"]);
SWDA_ActorSprites.frameNum     = Number(params["Frame Number"]);
SWDA_ActorSprites.defaultFrame = Number(params["Default Frame"]);
SWDA_ActorSprites.motionSpeed  = Number(params["Motion Speed"]);
// 序号
SWDA_ActorSprites.walk      = Number(params["walk"]);
SWDA_ActorSprites.wait      = Number(params["wait"]);
SWDA_ActorSprites.chant     = Number(params["chant"]);
SWDA_ActorSprites.guard     = Number(params["guard"]);
SWDA_ActorSprites.damage    = Number(params["damage"]);
SWDA_ActorSprites.evade     = Number(params["evade"]);
SWDA_ActorSprites.thrust    = Number(params["thrust"]);
SWDA_ActorSprites.swing     = Number(params["swing"]);
SWDA_ActorSprites.missile   = Number(params["missile"]);
SWDA_ActorSprites.skill     = Number(params["skill"]);
SWDA_ActorSprites.spell     = Number(params["spell"]);
SWDA_ActorSprites.item      = Number(params["item"]);
SWDA_ActorSprites.escape    = Number(params["escape"]);
SWDA_ActorSprites.victory   = Number(params["victory"]);
SWDA_ActorSprites.dying     = Number(params["dying"]);
SWDA_ActorSprites.abnormal  = Number(params["abnormal"]);
SWDA_ActorSprites.sleep     = Number(params["sleep"]);
SWDA_ActorSprites.dead      = Number(params["dead"]);
// 循环
SWDA_ActorSprites.walkLoop      = eval(params["walk loop"]);
SWDA_ActorSprites.waitLoop      = eval(params["wait loop"]);
SWDA_ActorSprites.chantLoop     = eval(params["chant loop"]);
SWDA_ActorSprites.guardLoop     = eval(params["guard loop"]);
SWDA_ActorSprites.damageLoop    = eval(params["damage loop"]);
SWDA_ActorSprites.evadeLoop     = eval(params["evade loop"]);
SWDA_ActorSprites.thrustLoop    = eval(params["thrust loop"]);
SWDA_ActorSprites.swingLoop     = eval(params["swing loop"]);
SWDA_ActorSprites.missileLoop   = eval(params["missile loop"]);
SWDA_ActorSprites.skillLoop     = eval(params["skill loop"]);
SWDA_ActorSprites.spellLoop     = eval(params["spell loop"]);
SWDA_ActorSprites.itemLoop      = eval(params["item loop"]);
SWDA_ActorSprites.escapeLoop    = eval(params["escape loop"]);
SWDA_ActorSprites.victoryLoop   = eval(params["victory loop"]);
SWDA_ActorSprites.dyingLoop     = eval(params["dying loop"]);
SWDA_ActorSprites.abnormalLoop  = eval(params["abnormal loop"]);
SWDA_ActorSprites.sleepLoop     = eval(params["sleep loop"]);
SWDA_ActorSprites.deadLoop      = eval(params["dead loop"]);


//=============================================================================
// Sprite_Actor
//=============================================================================

// 动作参数
Sprite_Actor.MOTIONS = {
    walk:     { index: SWDA_ActorSprites.walk,     loop: SWDA_ActorSprites.walkLoop  },
    wait:     { index: SWDA_ActorSprites.wait,     loop: SWDA_ActorSprites.waitLoop  },
    chant:    { index: SWDA_ActorSprites.chant,    loop: SWDA_ActorSprites.chantLoop  },
    guard:    { index: SWDA_ActorSprites.guard,    loop: SWDA_ActorSprites.guardLoop  },
    damage:   { index: SWDA_ActorSprites.damage,   loop: SWDA_ActorSprites.damageLoop },
    evade:    { index: SWDA_ActorSprites.evade,    loop: SWDA_ActorSprites.evadeLoop },
    thrust:   { index: SWDA_ActorSprites.thrust,   loop: SWDA_ActorSprites.thrustLoop },
    swing:    { index: SWDA_ActorSprites.swing,    loop: SWDA_ActorSprites.swingLoop },
    missile:  { index: SWDA_ActorSprites.missile,  loop: SWDA_ActorSprites.missileLoop },
    skill:    { index: SWDA_ActorSprites.skill,    loop: SWDA_ActorSprites.skillLoop },
    spell:    { index: SWDA_ActorSprites.spell,    loop: SWDA_ActorSprites.spellLoop },
    item:     { index: SWDA_ActorSprites.item,     loop: SWDA_ActorSprites.itemLoop },
    escape:   { index: SWDA_ActorSprites.escape,   loop: SWDA_ActorSprites.escapeLoop  },
    victory:  { index: SWDA_ActorSprites.victory,  loop: SWDA_ActorSprites.victoryLoop  },
    dying:    { index: SWDA_ActorSprites.dying,    loop: SWDA_ActorSprites.dyingLoop  },
    abnormal: { index: SWDA_ActorSprites.abnormal, loop: SWDA_ActorSprites.abnormalLoop  },
    sleep:    { index: SWDA_ActorSprites.sleep,    loop: SWDA_ActorSprites.sleepLoop  },
    dead:     { index: SWDA_ActorSprites.dead,     loop: SWDA_ActorSprites.deadLoop  }
};


// 战斗图划分
Sprite_Actor.prototype.updateFrame = function() {
    Sprite_Battler.prototype.updateFrame.call(this);
    var bitmap = this._mainSprite.bitmap;
    if (bitmap) {
        var motionIndex = this._motion ? this._motion.index : 0;
		
        var pattern = this._pattern < SWDA_ActorSprites.frameNum ? this._pattern : SWDA_ActorSprites.defaultFrame;
        var cw = bitmap.width / (SWDA_ActorSprites.column * SWDA_ActorSprites.frameNum);
        var ch = bitmap.height / SWDA_ActorSprites.row;
        var cx = Math.floor(motionIndex / SWDA_ActorSprites.row) * SWDA_ActorSprites.frameNum + pattern;
        var cy = motionIndex % SWDA_ActorSprites.row;
        this._mainSprite.setFrame(cx * cw, cy * ch, cw, ch);
    }
	
	//YEP_BattleEngineCore
	if (Imported.YEP_BattleEngineCore){
		if (!this._mainSprite) return;
		if (!this._mainSprite.bitmap) return;
		if (this._mainSprite.bitmap.width > 0 && !this.bitmap) {
		  var sw = this._mainSprite.bitmap.width / (SWDA_ActorSprites.column * SWDA_ActorSprites.frameNum);
		  var sh = this._mainSprite.bitmap.height / SWDA_ActorSprites.row;
		  this.bitmap = new Bitmap(sw, sh);
		}
	}
	
	

};


// 刷新动画
Sprite_Actor.prototype.updateMotionCount = function() {
    if (this._motion && ++this._motionCount >= this.motionSpeed()) {
        if (this._motion.loop) {
            this._pattern = (this._pattern + 1) % (SWDA_ActorSprites.frameNum + 1);
        } else if (this._pattern < (SWDA_ActorSprites.frameNum - 1)) {
            this._pattern++;
        } else {
            this.refreshMotion();
        }
        this._motionCount = 0;
    }
};

// 速度
Sprite_Actor.prototype.motionSpeed = function() {
    return SWDA_ActorSprites.motionSpeed;
};




